#include <stdio.h>
#include <unistd.h>
#include <sys/time.h>
#include <pthread.h>
#include <stdlib.h>

// 假设这是一个长时间的计算函数
int sum_sqr(int n)
{
    sleep(1);
    return n *n;
}

// 在分线程计算的函数
void *sum_sqr_thread_fun(void *arg)
{
    int num = *(int *)arg; // 得到主线程传进来的数据
    int *result = malloc(sizeof(int));
    *result = num*num;
    sleep(1);
    // return result;
    pthread_exit(result);
}

int main(int argc, char const *argv[])
{
    int items[5] = {1, 2, 3, 4, 5};
    int sqrs[5];
    struct timeval start, end;
    gettimeofday(&start, NULL);
    // 启动5个线程分别计算
    pthread_t threads[5];
    for (int i = 0; i < 5; i++)
    {
        pthread_create(&threads[i], NULL, sum_sqr_thread_fun, &items[i]);
    }

    // 等待线程结束并获取结果
    for (int i = 0; i < 5; i++)
    {
        void *result;
        pthread_join(threads[i], &result);
        sqrs[i] = *(int *)result;
    }

    gettimeofday(&end, NULL);
    printf("time = %ld\n", end.tv_sec - start.tv_sec);

    // 累加
    int sum = 0;
    for (int i = 0; i < 5; i++)
    {
        sum += sqrs[i];
    }
    printf("sum = %d\n", sum);
    
    return 0;
}
